STM32晶片內部有一個Flash記憶體,主要用於儲存我們所打的程式,我們在軟體上打好程式編譯完成後燒入的程式都存在這,由於FLASH記憶體的內容在掉電後不會丟失,晶片重新上電重定後,內核可從內部FLASH 中載入代碼並運行。
ST-Link燒錄器就是將程式轉成.hex檔燒入進Flash,若內部Flash存儲了程式後還有剩餘的空間,我們可以把它像外部SPI-Flash 那樣利用起來,存儲一些程式運行時產生的需要掉電保存的資料。
訪問內部Flash的速度要比外部的SPI-Flash 快得多,所以在緊急狀態下常常會使用內部Flash存儲關鍵記錄;為了防止應用程式被抄襲,有的應用會禁止讀寫內部FLASH 中的內容,或者在第一次運行時計算加密資訊並記錄到某些區域,然後刪除自身的部分加密代碼,這些應用都涉及到內部FLASH 的操作,這部分較為複雜我就不整理上來了,這地方我也還沒看懂目前也沒有這需求要用到內部Flash。
內部的Flash擦除次數是有限制次數,不像EEPROM可以擦除較多次,這兩個記憶體擦除次數差距約100倍以上,至於STM32各個MCU的Datasheet裡有提到內部Flash約略擦除幾次,先來看看STM32F030
紅框處,約1千次
再來看看STM32F429的Datasheet
約1萬次
這次數我認為不算多,非必要能不用就不用,還有1個蠻重要的觀念不能動到不該動的區域有可能會造成整個MCU上電後異常,我剛學STM暫存器操作的時候就不小心遇過這問題,我不確定是操作到甚麼暫存器導致MCU都不能燒入,但辨識的到MCU。
這時有STM32 ST-LINK utility這個工具可以把內部的內部Flash擦除,我用了這個後就能正常燒入啦~
ST官方載點:https://www.st.com/en/development-tools/stsw-link004.html
軟體開起來介面如下:
接下來把一塊開發板擦上ST-Link燒入器,接上的腳位(SWDIO、SWCLK、3.3V、GND)
按下圖插頭連接的部分,按一下放開後馬上按開發板上的Reset,就會跑出這樣:
紅框按下像插頭的圖案,按了後馬上Reset MCU就會跑出橘框內的數值,這就是內部Flash數值,為16進制。
那我要如何擦除?
按這個橡皮擦的圖案會出現下圖對話框
按確定後內部Flash會變成這樣。如下圖:
全部都變FFFF FFFF,這樣代表你擦除成功了~
看到上面讀出內部的hex,不知道有沒有人想到這可以複製別人的記憶體區塊來燒入同樣1顆MCU。
是可以這樣做複製,直接利用這個軟體來燒入.hex檔,其實在Keil5編譯程式的時候就有儲存.hex檔了!!
檔案路徑在下圖,可做更改
魔術棒->視窗裡的紅框按下可設定編譯後儲存路徑
就可以利用那個.hex檔來用這軟體燒入,我驗證過了絕對可以!
STM有針對這個複製內部Flash來實現別人寫的程式做一項功能,鎖存內部Flash,這部分離我太遠了等之後有空再來慢慢研究吧~
今天就這樣啦,以上全部個人經驗,有誤歡迎指出來。